<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <!-- 
    改变this指向的三种方法：call(),bind(),apply()
    1.call()
      调用这个函数，并且修改函数运行时的this指向
      fn.call(this,参数1，参数2)
      call经常用于继承
    2.apply()
      调用这个函数，并且修改函数运行时的this指向 ，参数必须写成数组的形式，这就是和call的区别之处
      fn.apply(this,[参数1，参数2])
      应用：用Math.max求最大值  
    3.bind()
      也可以改变this的指向，但是不会调用函数
      返回的是原函数改变this之后的新函数,
      应用：
   -->
   <script>
     function fn(x,y){
       console.log(this);
     }
     var o = {
       name:'lkun'
     }
    //  fn()
    // 可以调用函数 第一个参数改变this的指向
    fn.call(o,1,2)  //输出o对象
    var arr = [1,4,3,34,63,32,3,5]
    // let max = Math.max(arr) //NAN 因为max中不能以数组形式写入参数 也可以是用扩展运算符...arr的方法，拆开数组
     let max= Math.max.apply(Math,arr)  //虽然传入的参数是数组，但是会以一个一个形式输出
     console.log(max);

     var f = fn.bind(o,1,2)
     f()
   </script>
</body>
</html>